# coding:utf-8
'''
Created on 2011-3-4

@author: xi_li
'''
list = ["a", "b", "z", 1, 10]
print list
print list[0]
print list[3]
print list[-1]
print list[-2]

#================================
# list的分片（slice）
#================================
print list[1:3] # 从第1个元素到第3个元素，包含第1个元素，不包含第3个元素
print list[2:-1]

#================================
# list的分片简写，如果“:”的左侧不写则默认为0，“:”的右侧不写则默认为list的长度
#================================
print list[:3]
print list[:] # list的所有元素
print list[3:]

#================================
# 给list增加元素
#================================
list.append("new") # 方式1
print list
list.insert(2, "new") # 方式2
print list
list.extend(["two", "element"]) # 方式3
print list

#================================
# extend（扩展）与append（追加）的差别
#================================
list2 = ['a', 'b', 'c']
list2.extend(['d', 'e', 'f']);
print list2
print len(list2) # 6

list2 = ['a', 'b', 'c']
list2.append(['d', 'e', 'f']);
print list2
print len(list2) # 4

#================================
# 搜索list
#================================
list3 = ['a', 'b', 'c', 'd', 'e', 'f']
print list3.index('c')
# 当找不到的时候不是返回None，而是抛出一个异常
#print list3.index('h')

#================================
# 删除list中的元素
#================================
print list3
list3.remove('d')
print list3
# 当删除不存在的元素时会抛出一个异常
# list3.remove('h')
print list3.pop() # 删除最后一个元素并返回被删除的元素的值

#================================
# list可以使用的运算符
#================================
list4 = ['a', 'b', 'c']
list4 = list4 + ['d', 'e']
print list4 # ['a', 'b', 'c', 'd', 'e']
list4 += ['f']
print list4 # ['a', 'b', 'c', 'd', 'e', 'f']
list4 = [1, 2] * 3
print list4 # [1, 2, 1, 2, 1, 2]

#==============================================================================
# list的extend和“+”的区别：“+”相当于把两个list连接起来，然后返回一个新的list（连接后的）。
# 而extend只是修改原list，即在原list上增加新元素。所以对于大型list来说，extend的执行速度要更快一些。
#==============================================================================


#================================================================================
# list映射，注：对list的映射并不改变原始的list，而是产生一个新的list
#================================================================================
list5 = [1, 9, 8, 6]
list5_new = [elm * 2 for elm in list5]
print list5
print list5_new

#================================================================================
# list映射第二种方式，使用map内置函数
#================================================================================
list5_2 = [1, 9, 8, 6]
def double(num):
    return num * 2
print map(double, list5_2)

#================================================================================
# list过滤，过滤语法为：[expression for element in source-list if filter-expression]
#================================================================================
list6 = [1, 2, 3, 4, 5, 6, 2, 3, 6, 8, 1, 3, 6, 4]
print [elem for elem in list6 if elem > 3] # 找出list6中大于3的所有元素
print [elem for elem in list6 if list6.count(elem) == 1] # 找出list6中只出现过一次的元素

#================================================================================
# list过滤第二种方式，使用filter内置函数
#================================================================================
list6_2 = [1, 2, 3, 4, 5, 6, 2, 3, 6, 8, 1, 3, 6, 4]
def lager(num):
    return num > 3
print filter(lager, list6_2)

